Skip to content

Conversation

@LazyTrain082
Copy link
Contributor

@LazyTrain082 LazyTrain082 commented Nov 25, 2025

Moved Force Leap to Force Powers, made it available with any melee weapon.

New 1h Lightsaber ability, Pommel Strike. Deal damage and daze.

Updated tlk

Summary by CodeRabbit

  • New Features

    • Added Pommel Strike one-handed ability (3 levels) with daze effect
    • Added Pommel Strike perk (3 levels)
  • Balance Changes

    • Increased Hard Slash damage for levels II and III
    • Force Leap now consumes Force Points (FP) instead of stamina
  • Ability Adjustments

    • Force Leap accepts any melee weapon in the right hand
    • Force Leap damage and scaling now use the Force skill

✏️ Tip: You can customize this high-level summary in your review settings.

Moved Force Leap to Force Powers, made it available with any melee weapon.

New 1h Lightsaber ability, Pommel Strike. Deal damage and daze.
for the new abilities
@coderabbitai
Copy link

coderabbitai bot commented Nov 25, 2025

Warning

Rate limit exceeded

@LazyTrain082 has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 15 minutes and 44 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 1a9857e and 3c9f40d.

📒 Files selected for processing (1)
  • SWLOR.Game.Server/Feature/AbilityDefinition/TwoHanded/HardSlashAbilityDefinition.cs (1 hunks)

Walkthrough

Force Leap was moved from OneHanded to Force, swapped OneHanded skill/resource usages to Force/FP. A new Pommel Strike one-handed ability and perk (three levels) were added. Hard Slash II/III damage increased. Enums for feats, recast, and perks were extended; a submodule pointer updated.

Changes

Cohort / File(s) Change Summary
Force Leap (refactor & FP)
SWLOR.Game.Server/Feature/AbilityDefinition/Force/ForceLeapAbilityDefinition.cs, SWLOR.Game.Server/Feature/PerkDefinition/ForcePerkDefinition.cs, SWLOR.Game.Server/Feature/PerkDefinition/OneHandedPerkDefinition.cs
Moved ForceLeap class to Force namespace; replaced SkillType.OneHanded usages with SkillType.Force (damage/combat points/attack); changed resource requirement from RequirementStamina(...) to RequirementFP(...) for all levels; moved ForceLeap perk into ForcePerkDefinition and removed from OneHanded.
Pommel Strike ability
SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs
Added Pommel Strike ability (I–III): right-hand melee validation (disallow lightsabers), level-based damage using one-handed bonus, combat-point grant, Will-based daze with temporary immunity, activation animation, recast group usage.
Pommel Strike perk & feat wiring
SWLOR.Game.Server/Feature/PerkDefinition/OneHandedPerkDefinition.cs, SWLOR.NWN.API/NWScript/Enum/FeatType.cs
Removed ForceLeap from OneHanded perks; added PommelStrike perk (3 levels) to OneHandedPerkDefinition; added FeatType entries PommelStrike1/2/3 (1997–1999).
Recast / Perk enums
SWLOR.Game.Server/Service/AbilityService/RecastGroup.cs, SWLOR.Game.Server/Service/PerkService/PerkType.cs
Added RecastGroup.PommelStrike = 126 (with attribute) and PerkType.PommelStrike = 300.
Balance change
SWLOR.Game.Server/Feature/AbilityDefinition/TwoHanded/HardSlashAbilityDefinition.cs
Increased Hard Slash II damage 24 → 29 and Hard Slash III 38 → 43.
Stat formatting
SWLOR.Game.Server/Service/Stat.cs
Whitespace/formatting change only (extra blank lines). No logic changes.
Submodule pointer
SWLOR_Haks
Updated tracked submodule commit reference (no code changes).

Sequence Diagram(s)

sequenceDiagram
    participant Player
    participant PommelAbility as Pommel Strike
    participant Validation
    participant DamageCalc
    participant SavingThrow
    participant DazeEffect

    Player->>PommelAbility: Activate Pommel Strike
    PommelAbility->>Validation: Verify right-hand melee (no lightsabers)
    alt Invalid weapon
        Validation-->>Player: Reject activation
    else Valid
        PommelAbility->>DamageCalc: Compute base + OneHanded bonus
        DamageCalc-->>PommelAbility: Damage value
        PommelAbility->>Player: Apply damage & grant combat points
        PommelAbility->>SavingThrow: Trigger Will save (DC = Perception + 10)
        alt Save fails
            SavingThrow->>DazeEffect: Apply Daze + grant temporary immunity
            DazeEffect-->>Player: Dazed
        else Save succeeds
            SavingThrow-->>Player: No daze
        end
    end
Loading
sequenceDiagram
    participant Player
    participant ForceLeapAbility as Force Leap
    participant ResourceCheck
    participant DamageCalc

    Player->>ForceLeapAbility: Activate Force Leap
    ForceLeapAbility->>ResourceCheck: Require FP (RequirementFP)
    alt Insufficient FP
        ResourceCheck-->>Player: Fail activation
    else Sufficient FP
        ForceLeapAbility->>DamageCalc: Calculate using SkillType.Force
        DamageCalc-->>ForceLeapAbility: Damage result
        ForceLeapAbility->>Player: Apply damage & grant Force combat points
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • Pay extra attention to:
    • ForceLeapAbilityDefinition.cs — consistency of SkillType and FP usage across damage, combat points, and attack calculations.
    • PommelStrikeAbilityDefinition.cs — validation logic, damage stacking with one-handed bonuses, save/DC correctness, daze timing/immunity, and recast registration.
    • OneHandedPerkDefinition.cs / ForcePerkDefinition.cs — correct perk placement, costs, and feat grants.
    • Enum additions (FeatType, RecastGroup, PerkType) — ensure no integer collisions with existing values.
    • HardSlashAbilityDefinition.cs — confirm intended balance changes.

Suggested reviewers

  • zunath

Poem

🐰 I hop and test with nimble feet,
New strikes and Force now dance and meet.
A daze, a leap, new feats to find—
I code, I nibble, and leave bugs behind! ✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 4.55% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title directly matches the main changes: Force Leap is moved and made available with any melee weapon, and Pommel Strike ability is added for one-handed lightsabers.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
SWLOR.Game.Server/Service/Stat.cs (1)

1932-1939: Unused Force Valor accuracy helper – consider wiring it in or removing

GetForceValorAccuracyBonus is currently dead code. Either plug it into CalculateEffectAccuracy / CalculateEffectAccuracyNative (and align Force Valor perk text accordingly), or drop the helper until it’s actually needed to avoid confusion.

SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs (1)

89-133: Builder usage for Pommel Strike I–III is consistent; optional DRY-up

The three Pommel Strike ranks are wired correctly:

  • Each uses FeatType.PommelStrikeX with PerkType.PommelStrike.
  • Shared recast group, activation delay, flags, and validation/impact delegates.
  • Stamina costs scale by rank, which fits a OneHanded physical ability.

As per coding guidelines, this follows the intended builder pattern for ability definitions.

If you want to reduce duplication later, consider a small helper that takes (builder, feat, level, staminaCost, name) and applies the common chain, but this is purely cosmetic and can be deferred.

SWLOR.Game.Server/Feature/AbilityDefinition/Force/ForceLeapAbilityDefinition.cs (1)

43-117: Force-based damage/attack updates look consistent; consider StrongStyleLightsaber interaction

The impact logic changes to use Force skill everywhere:

  • Combat.GetAbilityDamageBonus(activator, SkillType.Force)
  • CombatPoint.AddCombatPoint(activator, target, SkillType.Force, 3)
  • Stat.GetAttack(activator, stat, SkillType.Force)

This aligns Force Leap with Force progression instead of OneHanded, which is exactly what you want after moving it into the Force tree.

One nuance: stat still switches between Perception and Might based on AbilityToggleType.StrongStyleLightsaber, even though the ability now works with any melee weapon. If StrongStyleLightsaber is only ever toggleable while wielding a lightsaber, this remains fine; if players can carry that toggle over to non-lightsaber melee, they’ll get Might-based scaling on non-saber Force Leaps, which may or may not be intended.

If that’s not desired, you might want to gate that toggle check behind a lightsaber-equipped condition or eventually generalize it to a broader “strong style” concept. Not a blocker, but worth confirming.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a7ab59c and 421fbe1.

📒 Files selected for processing (9)
  • SWLOR.Game.Server/Feature/AbilityDefinition/Force/ForceLeapAbilityDefinition.cs (10 hunks)
  • SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs (1 hunks)
  • SWLOR.Game.Server/Feature/AbilityDefinition/TwoHanded/HardSlashAbilityDefinition.cs (1 hunks)
  • SWLOR.Game.Server/Feature/PerkDefinition/ForcePerkDefinition.cs (2 hunks)
  • SWLOR.Game.Server/Feature/PerkDefinition/OneHandedPerkDefinition.cs (2 hunks)
  • SWLOR.Game.Server/Service/AbilityService/RecastGroup.cs (1 hunks)
  • SWLOR.Game.Server/Service/PerkService/PerkType.cs (1 hunks)
  • SWLOR.Game.Server/Service/Stat.cs (1 hunks)
  • SWLOR.NWN.API/NWScript/Enum/FeatType.cs (1 hunks)
🧰 Additional context used
📓 Path-based instructions (5)
SWLOR.Game.Server/Service/**/*.cs

📄 CodeRabbit inference engine (CLAUDE.md)

SWLOR.Game.Server/Service/**/*.cs: Place business logic in SWLOR.Game.Server/Service with one service per major system
Services should expose static methods and be accessed statically
Add new services under Service with static method APIs

Files:

  • SWLOR.Game.Server/Service/PerkService/PerkType.cs
  • SWLOR.Game.Server/Service/AbilityService/RecastGroup.cs
  • SWLOR.Game.Server/Service/Stat.cs
{SWLOR.Game.Server,SWLOR.CLI,SWLOR.Runner,SWLOR.Web,SWLOR.Admin}/**/*.cs

📄 CodeRabbit inference engine (CLAUDE.md)

{SWLOR.Game.Server,SWLOR.CLI,SWLOR.Runner,SWLOR.Web,SWLOR.Admin}/**/*.cs: Use Serilog for logging across all C# projects
Use Newtonsoft.Json for JSON serialization

Files:

  • SWLOR.Game.Server/Service/PerkService/PerkType.cs
  • SWLOR.Game.Server/Service/AbilityService/RecastGroup.cs
  • SWLOR.Game.Server/Feature/AbilityDefinition/TwoHanded/HardSlashAbilityDefinition.cs
  • SWLOR.Game.Server/Service/Stat.cs
  • SWLOR.Game.Server/Feature/PerkDefinition/OneHandedPerkDefinition.cs
  • SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs
  • SWLOR.Game.Server/Feature/PerkDefinition/ForcePerkDefinition.cs
  • SWLOR.Game.Server/Feature/AbilityDefinition/Force/ForceLeapAbilityDefinition.cs
SWLOR.Game.Server/Feature/{AbilityDefinition,PerkDefinition,RecipeDefinition,QuestDefinition,ItemDefinition}/**/*.cs

📄 CodeRabbit inference engine (CLAUDE.md)

Use the builder pattern for game content definitions in Feature/*Definition directories

Files:

  • SWLOR.Game.Server/Feature/AbilityDefinition/TwoHanded/HardSlashAbilityDefinition.cs
  • SWLOR.Game.Server/Feature/PerkDefinition/OneHandedPerkDefinition.cs
  • SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs
  • SWLOR.Game.Server/Feature/PerkDefinition/ForcePerkDefinition.cs
  • SWLOR.Game.Server/Feature/AbilityDefinition/Force/ForceLeapAbilityDefinition.cs
SWLOR.Game.Server/Feature/AbilityDefinition/**/*.cs

📄 CodeRabbit inference engine (CLAUDE.md)

Add new abilities as classes under Feature/AbilityDefinition using the builder pattern

Files:

  • SWLOR.Game.Server/Feature/AbilityDefinition/TwoHanded/HardSlashAbilityDefinition.cs
  • SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs
  • SWLOR.Game.Server/Feature/AbilityDefinition/Force/ForceLeapAbilityDefinition.cs
SWLOR.Game.Server/Feature/PerkDefinition/**/*.cs

📄 CodeRabbit inference engine (CLAUDE.md)

Add new perks as classes under Feature/PerkDefinition with progression logic

Files:

  • SWLOR.Game.Server/Feature/PerkDefinition/OneHandedPerkDefinition.cs
  • SWLOR.Game.Server/Feature/PerkDefinition/ForcePerkDefinition.cs
🧠 Learnings (10)
📚 Learning: 2025-08-26T22:48:55.951Z
Learnt from: CR
Repo: zunath/SWLOR_NWN PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-08-26T22:48:55.951Z
Learning: Applies to SWLOR.Game.Server/Feature/PerkDefinition/**/*.cs : Add new perks as classes under Feature/PerkDefinition with progression logic

Applied to files:

  • SWLOR.Game.Server/Service/PerkService/PerkType.cs
  • SWLOR.Game.Server/Feature/PerkDefinition/OneHandedPerkDefinition.cs
  • SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs
  • SWLOR.Game.Server/Feature/PerkDefinition/ForcePerkDefinition.cs
📚 Learning: 2025-09-09T15:50:07.811Z
Learnt from: zunath
Repo: zunath/SWLOR_NWN PR: 0
File: :0-0
Timestamp: 2025-09-09T15:50:07.811Z
Learning: Beast stat rebalancing in SWLOR is based on calculations from a Google Sheets document (https://docs.google.com/spreadsheets/d/1uzF7rtXXUaxBS_8cZb83M_9I2bMma6WBOFRkgDY5PP0/edit?gid=1176147451#gid=1176147451). When reviewing beast definition changes, the numbers should align with this calculation spreadsheet. There was a previous error in the original document that resulted in inaccurate stats, which has since been corrected.

Applied to files:

  • SWLOR.Game.Server/Service/Stat.cs
📚 Learning: 2025-08-26T22:48:55.951Z
Learnt from: CR
Repo: zunath/SWLOR_NWN PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-08-26T22:48:55.951Z
Learning: Applies to SWLOR.Game.Server/Feature/ItemDefinition/**/*.cs : Add new items as classes under Feature/ItemDefinition with appropriate use handlers

Applied to files:

  • SWLOR.Game.Server/Feature/PerkDefinition/OneHandedPerkDefinition.cs
  • SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs
  • SWLOR.Game.Server/Feature/AbilityDefinition/Force/ForceLeapAbilityDefinition.cs
📚 Learning: 2025-08-26T22:48:55.951Z
Learnt from: CR
Repo: zunath/SWLOR_NWN PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-08-26T22:48:55.951Z
Learning: Applies to SWLOR.Game.Server/Feature/{AbilityDefinition,PerkDefinition,RecipeDefinition,QuestDefinition,ItemDefinition}/**/*.cs : Use the builder pattern for game content definitions in Feature/*Definition directories

Applied to files:

  • SWLOR.Game.Server/Feature/PerkDefinition/OneHandedPerkDefinition.cs
  • SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs
  • SWLOR.Game.Server/Feature/AbilityDefinition/Force/ForceLeapAbilityDefinition.cs
📚 Learning: 2025-08-26T22:48:55.951Z
Learnt from: CR
Repo: zunath/SWLOR_NWN PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-08-26T22:48:55.951Z
Learning: Applies to SWLOR.Game.Server/Feature/AbilityDefinition/**/*.cs : Add new abilities as classes under Feature/AbilityDefinition using the builder pattern

Applied to files:

  • SWLOR.Game.Server/Feature/PerkDefinition/OneHandedPerkDefinition.cs
  • SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs
  • SWLOR.Game.Server/Feature/PerkDefinition/ForcePerkDefinition.cs
  • SWLOR.Game.Server/Feature/AbilityDefinition/Force/ForceLeapAbilityDefinition.cs
📚 Learning: 2025-08-26T22:48:55.951Z
Learnt from: CR
Repo: zunath/SWLOR_NWN PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-08-26T22:48:55.951Z
Learning: Applies to SWLOR.Game.Server/Service/**/*.cs : Place business logic in SWLOR.Game.Server/Service with one service per major system

Applied to files:

  • SWLOR.Game.Server/Feature/AbilityDefinition/Force/ForceLeapAbilityDefinition.cs
📚 Learning: 2025-08-26T22:48:55.951Z
Learnt from: CR
Repo: zunath/SWLOR_NWN PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-08-26T22:48:55.951Z
Learning: Applies to SWLOR.Game.Server/Service/**/*.cs : Add new services under Service with static method APIs

Applied to files:

  • SWLOR.Game.Server/Feature/AbilityDefinition/Force/ForceLeapAbilityDefinition.cs
📚 Learning: 2025-08-26T22:48:55.951Z
Learnt from: CR
Repo: zunath/SWLOR_NWN PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-08-26T22:48:55.951Z
Learning: Applies to SWLOR.Game.Server/Service/**/*.cs : Services should expose static methods and be accessed statically

Applied to files:

  • SWLOR.Game.Server/Feature/AbilityDefinition/Force/ForceLeapAbilityDefinition.cs
📚 Learning: 2025-08-26T22:48:55.951Z
Learnt from: CR
Repo: zunath/SWLOR_NWN PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-08-26T22:48:55.951Z
Learning: Applies to {SWLOR.Game.Server,SWLOR.CLI,SWLOR.Runner,SWLOR.Web,SWLOR.Admin}/**/*.cs : Use Newtonsoft.Json for JSON serialization

Applied to files:

  • SWLOR.Game.Server/Feature/AbilityDefinition/Force/ForceLeapAbilityDefinition.cs
📚 Learning: 2025-08-26T22:48:55.951Z
Learnt from: CR
Repo: zunath/SWLOR_NWN PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-08-26T22:48:55.951Z
Learning: Applies to SWLOR.Game.Server/Entity/**/*.cs : Entities (data models) must live under SWLOR.Game.Server/Entity and include Redis serialization attributes

Applied to files:

  • SWLOR.Game.Server/Feature/AbilityDefinition/Force/ForceLeapAbilityDefinition.cs
🧬 Code graph analysis (5)
SWLOR.Game.Server/Service/PerkService/PerkType.cs (1)
SWLOR.Game.Server/Feature/PerkDefinition/OneHandedPerkDefinition.cs (1)
  • PommelStrike (873-901)
SWLOR.Game.Server/Service/AbilityService/RecastGroup.cs (1)
SWLOR.Game.Server/Feature/PerkDefinition/OneHandedPerkDefinition.cs (1)
  • PommelStrike (873-901)
SWLOR.Game.Server/Service/Stat.cs (1)
SWLOR.Game.Server/Service/StatusEffect.cs (3)
  • StatusEffect (11-591)
  • HasStatusEffect (476-496)
  • HasStatusEffect (505-514)
SWLOR.NWN.API/NWScript/Enum/FeatType.cs (1)
SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs (3)
  • PommelStrike1 (89-103)
  • PommelStrike2 (104-118)
  • PommelStrike3 (119-133)
SWLOR.Game.Server/Feature/PerkDefinition/ForcePerkDefinition.cs (1)
SWLOR.Game.Server/Feature/AbilityDefinition/Force/ForceLeapAbilityDefinition.cs (3)
  • ForceLeap1 (119-134)
  • ForceLeap2 (135-150)
  • ForceLeap3 (151-166)
🔇 Additional comments (8)
SWLOR.Game.Server/Service/PerkService/PerkType.cs (1)

303-308: New PerkType.PommelStrike enum value needs matching 2DA entry

Adding PommelStrike = 300 is consistent, but since these IDs are tied to iprp_resperk.2da, double‑check that a corresponding row with ID 300 has been added there (and any other relevant 2DAs) so the perk can be selected and used correctly at runtime.

SWLOR.Game.Server/Feature/AbilityDefinition/TwoHanded/HardSlashAbilityDefinition.cs (1)

44-52: Hard Slash II/III damage tuning is mechanically safe

Only the base damage for levels 2 and 3 changed (to 29 and 43). The rest of the hit / damage pipeline is unchanged, so this is a straightforward balance tweak with no functional regressions.

SWLOR.NWN.API/NWScript/Enum/FeatType.cs (1)

1966-1968: Pommel Strike feat IDs look consistent – verify 2DA/TLK wiring

PommelStrike1/2/3 appended at 1997–1999 fits the existing custom‑feat range and matches the usages in the Pommel Strike ability and perk definitions. Just ensure the corresponding rows exist in feats.2da (and TLK strings) at these indices so the feats show up and function correctly.

SWLOR.Game.Server/Service/AbilityService/RecastGroup.cs (1)

260-261: Pommel Strike recast group definition is consistent

The new RecastGroup.PommelStrike entry (display name + short name) matches the pattern used by other one‑handed activatables and keeps the short label within the GUI’s length constraint. This should integrate cleanly with the Pommel Strike ability definitions.

SWLOR.Game.Server/Feature/PerkDefinition/ForcePerkDefinition.cs (1)

36-40: Force Leap perk relocation into Force tree looks coherent – sync with ability implementation

Moving Force Leap into ForcePerkDefinition as PerkCategoryType.ForceUniversal / PerkType.ForceLeap with three levels (ForceLeap1–3) and Force skill requirements 15/30/45 matches the intent of making it a generic Force power. The builder usage follows the existing perk pattern and coding guidelines for perk definitions.

Please just double‑check that ForceLeapAbilityDefinition uses the same damage values (8/15/23) and the same 2‑second stun described here so players see accurate tooltip text.

Also applies to: 116-141

SWLOR.Game.Server/Feature/PerkDefinition/OneHandedPerkDefinition.cs (1)

48-48: Pommel Strike perk wiring is consistent with existing one‑handed lightsaber perks

PommelStrike() is correctly added to BuildPerks and defined as a three‑tier lightsaber perk under PerkCategoryType.OneHandedLightsaber with reasonable OneHanded skill gates, Force‑sensitive requirement, and Droid AI slots. The feat grants (PommelStrike1–3) match the new FeatType entries, and the builder usage aligns with the existing patterns for Shield Bash / Saber Strike and the project’s builder‑pattern guidelines. Based on learnings, this fits the expected perk‑definition style.

Also applies to: 873-901

SWLOR.Game.Server/Feature/AbilityDefinition/Force/ForceLeapAbilityDefinition.cs (2)

1-41: Weapon validation now correctly allows any melee weapon

The updated validation:

if (!Item.OneHandedMeleeItemTypes.Contains(rightHandType) &&
    !Item.TwoHandedMeleeItemTypes.Contains(rightHandType))
{
    return "A melee weapon must be equipped in your right hand to use this ability.";
}

matches the PR objective of making Force Leap available with any melee weapon (while still disallowing unarmed/ranged). The error message is aligned with the logic, and the rest of the range check/empty-string success path remains unchanged.


119-166: FP requirements per rank correctly convert Force Leap into a Force resource ability

The three Force Leap ranks now use FP instead of stamina:

  • Rank I: .RequirementFP(3)
  • Rank II: .RequirementFP(4)
  • Rank III: .RequirementFP(5)

Recast, activation, range, and flags are unchanged, and all three still use PerkType.ForceLeap and the shared validation/impact delegates. This cleanly aligns the resource type with the Force skill and Force namespace.

Correcting code comment
Leftover attempts at buffing Force Valor I forgot to delete
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (3)
SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs (3)

14-22: Builder usage and ability registration look correct

BuildAbilities uses AbilityBuilder and delegates to the three PommelStrike helpers, then returns builder.Build(). This matches the expected builder pattern for ability definitions and keeps registration centralized.

If you later add more one‑handed variants, consider a small helper that takes level/stamina as parameters to reduce repetition further, but it’s not necessary right now. Based on learnings, this aligns with the recommended pattern for Feature/AbilityDefinition files.


24-35: Validation cleanly enforces right‑hand lightsaber requirement

The validation correctly checks the activator’s right‑hand item against Item.LightsaberBaseItemTypes and returns an appropriate error when a lightsaber isn’t equipped. That’s consistent with this being a one‑handed lightsaber ability.

If you find yourself repeating this check across multiple saber abilities, you might want a small shared helper (e.g., Ability.ValidateRightHandLightsaber(activator)) to centralize the message and item‑type logic.


89-133: Pommel Strike I–III definitions are consistent and follow the builder pattern

All three Pommel Strike levels are wired through the builder with consistent flags (IsCastedAbility, IsHostileAbility, UnaffectedByHeavyArmor, BreaksStealth), share the same validation/impact logic, and scale in level and stamina cost as expected. Recast grouping under RecastGroup.PommelStrike also looks coherent across levels.

If you later need to tweak multiple properties (e.g., activation delay or shared flags), consider extracting a small helper that sets the common builder chain so only level‑specific bits (feat, level, stamina) vary. Based on learnings, this usage is already aligned with the builder‑pattern guidelines for abilities.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 421fbe1 and 87ebec1.

📒 Files selected for processing (2)
  • SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs (1 hunks)
  • SWLOR_Haks (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • SWLOR_Haks
🧰 Additional context used
📓 Path-based instructions (3)
SWLOR.Game.Server/Feature/{AbilityDefinition,PerkDefinition,RecipeDefinition,QuestDefinition,ItemDefinition}/**/*.cs

📄 CodeRabbit inference engine (CLAUDE.md)

Use the builder pattern for game content definitions in Feature/*Definition directories

Files:

  • SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs
SWLOR.Game.Server/Feature/AbilityDefinition/**/*.cs

📄 CodeRabbit inference engine (CLAUDE.md)

Add new abilities as classes under Feature/AbilityDefinition using the builder pattern

Files:

  • SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs
{SWLOR.Game.Server,SWLOR.CLI,SWLOR.Runner,SWLOR.Web,SWLOR.Admin}/**/*.cs

📄 CodeRabbit inference engine (CLAUDE.md)

{SWLOR.Game.Server,SWLOR.CLI,SWLOR.Runner,SWLOR.Web,SWLOR.Admin}/**/*.cs: Use Serilog for logging across all C# projects
Use Newtonsoft.Json for JSON serialization

Files:

  • SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs
🧠 Learnings (4)
📚 Learning: 2025-08-26T22:48:55.951Z
Learnt from: CR
Repo: zunath/SWLOR_NWN PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-08-26T22:48:55.951Z
Learning: Applies to SWLOR.Game.Server/Feature/AbilityDefinition/**/*.cs : Add new abilities as classes under Feature/AbilityDefinition using the builder pattern

Applied to files:

  • SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs
📚 Learning: 2025-08-26T22:48:55.951Z
Learnt from: CR
Repo: zunath/SWLOR_NWN PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-08-26T22:48:55.951Z
Learning: Applies to SWLOR.Game.Server/Feature/{AbilityDefinition,PerkDefinition,RecipeDefinition,QuestDefinition,ItemDefinition}/**/*.cs : Use the builder pattern for game content definitions in Feature/*Definition directories

Applied to files:

  • SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs
📚 Learning: 2025-08-26T22:48:55.951Z
Learnt from: CR
Repo: zunath/SWLOR_NWN PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-08-26T22:48:55.951Z
Learning: Applies to SWLOR.Game.Server/Feature/ItemDefinition/**/*.cs : Add new items as classes under Feature/ItemDefinition with appropriate use handlers

Applied to files:

  • SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs
📚 Learning: 2025-08-26T22:48:55.951Z
Learnt from: CR
Repo: zunath/SWLOR_NWN PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-08-26T22:48:55.951Z
Learning: Applies to SWLOR.Game.Server/Feature/PerkDefinition/**/*.cs : Add new perks as classes under Feature/PerkDefinition with progression logic

Applied to files:

  • SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs
🔇 Additional comments (1)
SWLOR.Game.Server/Feature/AbilityDefinition/OneHanded/PommelStrikeAbilityDefinition.cs (1)

37-87: I'll help you verify the review comment about the perk-adjusted stat usage in the Pommel Strike ability. Let me start by investigating how GetPerkAdjustedAbilityScore is defined and used throughout the codebase.
<function_calls>
<invoke_name>shell

#!/bin/bash

Find the definition of GetPerkAdjustedAbilityScore

rg -n "GetPerkAdjustedAbilityScore" SWLOR.Game.Server -B2 -A5 --type cs | head -100

</invoke_name>
</function_calls>

Looking for the method definition and usage patterns to understand the API contract.
<function_calls>
<invoke_name>shell

#!/bin/bash

Search for the method definition more specifically

rg -n "GetPerkAdjustedAbilityScore\s*(" SWLOR.Game.Server --type cs | head -20

</invoke_name>
</function_calls>

Let me also look at the Combat class to find the method definition:
<function_calls>
<invoke_name>shell

#!/bin/bash

Find Combat class and GetPerkAdjustedAbilityScore method

find SWLOR.Game.Server -type f -name "Combat.cs" | head -5

</invoke_name>
</function_calls>

<function_calls>
<invoke_name>shell

#!/bin/bash

Search for Combat class files

fd -t f "Combat.cs" SWLOR.Game.Server

</invoke_name>
</function_calls>

<function_calls>
<invoke_name>shell

#!/bin/bash

Search for any file containing GetPerkAdjustedAbilityScore definition (not just usage)

rg -n "public.*GetPerkAdjustedAbilityScore" SWLOR.Game.Server --type cs -B2 -A8

</invoke_name>
</function_calls>

<function_calls>
<invoke_name>shell

#!/bin/bash

Let's look at all usages with more context to understand the pattern

rg -n "GetPerkAdjustedAbilityScore" SWLOR.Game.Server --type cs -B3 -A3 | head -150

</invoke_name>
</function_calls>

Fixing leftover testing file I forgot to clean up
@LazyTrain082
Copy link
Contributor Author

Cleaning up leftover code and resubmitting.

@LazyTrain082
Copy link
Contributor Author

Alright for realsies this time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant